#pragma once

#include "Protocol.hpp"


//目前还需要解决的问题：
//1.测试client和serve端debug输出的字符串对不上，是正确的,看错了
//2.计算出现异常时此次的result输出的时上一次的result，
//构造函数的事情，调用的是参数只有code的构造函数，result的状态没有改变
//3.莫名输出的数字，不知道哪来的    
//封装的报文起始标志位和结束标志位是\r\n，可能是被解析为回车加换行了数字其实是报文的长度 


class NetCalculate
{
public:
    Response Execute(Request& req)
    {
        switch (req.GetOper())
        {
        case '+':
            return Response(req.GetX()+req.GetY(),0);
            
        case '-':
            return Response(req.GetX()-req.GetY(),0);
            
        case '*':
            return Response(req.GetX()*req.GetY(),0);
        case '/':
            if(req.GetY()==0)
            {
                LOG(FATAL)<<"除0错误";
                //除了除数为0时的计算结果为0，其余正常计算的结果都不可能为0，所以0可以表示除0错误，-1表示除0错误
                return Response(0,-1);
            }
            return Response(req.GetX()/req.GetY(),0);

        case '%':
            if(req.GetY()==0)
            {
                LOG(FATAL)<<"mod 0错误";
                //设置为result为x-y表示mod 0错误
                return Response(req.GetX()-req.GetY(),-2);//-2表示mod 0错误
            }
            return Response(req.GetX()%req.GetY(),0);
            
        default:
            LOG(FATAL)<<"非法操作";
            return Response(-3);//-3表示非法操作
            
        }
    }
};
